
//我们经常需要将各种数据类型转换成字符串，以便于输出、记录日志或进行其他处理。
//ostringstream是C++标准库中的一个类，提供了方便的字符串流处理功能，可以将各种数据类型转换成字符串形式

//头文件
#include<sstream>



//使用方法
#include <iostream>
#include <sstream>

int main() {
    // 创建ostringstream对象
    std::ostringstream oss;

    // 向oss中添加数据
    int num = 42;
    double pi = 3.1415926;
    std::string name = "John Doe";

    oss << "Number: " << num << ", Pi: " << pi << ", Name: " << name;

    // 从oss中提取字符串
    std::string result = oss.str();

    // 输出结果
    std::cout << result << std::endl;

    return 0;
}



//应用实例
/*
任何一个正整数都可以用2的幂次方表示。

例如：137=27+23+20

同时约定次方用括号来表示，即 a的b次方

 可表示为a (b)。

由此可知，137可表示为：2(7)+2(3)+2(0)
进一步：7=2(2)+2+2(0)


所以最后137可表示为：2(2(2)+2+2(0))+2(2+2(0))+2(0)

又如：1315=2(10)+2(8)+2(5)+2+2(0)

所以1315最后可表示为：

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
*/

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <sstream>

using namespace std;

// 递归函数，将数字转换为嵌套的2的幂次方表示
string dfs(long long n) {
    int i = 0;
    vector<int> list;
    ostringstream sb;

    // 将n拆解为2的幂次方的和
    while (true) {
        if (n < pow(2, i)) {
            list.push_back(i - 1);
            n -= pow(2, i - 1);
            i = 0;
            continue;
        } else if (n == pow(2, i)) {
            list.push_back(i);
            break;
        }
        i++;
    }

    // 生成嵌套的2的幂次方形式
    for (int j = 0; j < list.size(); ++j) {
        if (list[j] > 2) {
            sb << "2(" << dfs(list[j]) << ")";
            if (j != list.size() - 1) sb << "+"; // 加号处理
        } else if (list[j] == 2 || list[j] == 0) {
            sb << "2(" << list[j] << ")";
            if (j != list.size() - 1) sb << "+"; // 加号处理
        } else {
            sb << "2";
            if (j != list.size() - 1) sb << "+"; // 加号处理
        }
    }

    return sb.str();
}

int main() {
    long long n;
    cin >> n;

    // 调用递归函数并输出结果
    cout << dfs(n) << endl;
    return 0;
}